package com.oop.ch09;

import java.util.HashMap;//Map接口的实现类
import java.util.Iterator;
import java.util.Map;//接口

public class MapTest {
	public static void main(String[] args) {
		containsKey();
		containsValue();
	}
	
	public static void containsValue(){
		User user1=new User("1001","张三",17,"男");
		User user2=new User("1002","李四",18,"女");
		User user3=new User("1003","王五",19,"男");
		User user4=new User("1004","赵六",20,"女");
		User user5=new User("1005","齐七",21,"男");
		Map<String,User> userMap=new HashMap<>();
		userMap.put("1001",user1);
		userMap.put("1002",user2);
		userMap.put("1003",user3);
		userMap.put("1004",user4);
		userMap.put("1005",user5);
		
		//打印值集的内容
		System.out.println(userMap.values());
		
		if (userMap.containsValue(user5)) {
			System.out.println(user5.getName());
		}else {
			System.out.println("没有找到编号1005的用户");
		}
		
	}
	
	//**‼️
	public static void containsKey(){
		User user1=new User("1001","张三",17,"男");
		User user2=new User("1002","李四",18,"女");
		User user3=new User("1003","王五",19,"男");
		User user4=new User("1004","赵六",20,"女");
		User user5=new User("1005","齐七",21,"男");
		Map<String,User> userMap=new HashMap<>();
		userMap.put("1001",user1);
		userMap.put("1002",user2);
		userMap.put("1003",user3);
		userMap.put("1004",user4);
		userMap.put("1005",user5);
		
		//打印键集的内容
		System.out.println(userMap.keySet());
		
		//根据键查找map的键集中是否存在对应的键
		if (userMap.containsKey("1001")) {
			System.out.println(userMap.get("1001").getName());
		}else {
			System.out.println("没有找到编号1001的用户");
		}
		
	}
	
	//Map中存储用户对象---**‼️
	public static void each2(){
		User user1=new User("1001","张三",17,"男");
		User user2=new User("1002","李四",18,"女");
		User user3=new User("1003","王五",19,"男");
		User user4=new User("1004","赵六",20,"女");
		User user5=new User("1005","齐七",21,"男");
		
		//userMap集合中规定
		//key 键是 String类型，存储的是用户的编号 选择不重复，并且唯一的值
		//Value 值是 User对象，存储的是用户的对象
		Map<String,User> userMap=new HashMap<>();
		userMap.put("1001",user1);
		userMap.put("1002",user2);
		userMap.put("1003",user3);
		userMap.put("1004",user4);
		userMap.put("1005",user5);
		
		//Iterator最后加上范型，
		//Iterator 循环 一般是用while循环
		Iterator<String> it=userMap.keySet().iterator();
		while (it.hasNext()){//判断集合中是否存在下一个记录
			String id=it.next();//获取循环中键集中的一个键
			User user=userMap.get(id);
			System.out.println(user);
		}
	}
	
	//遍历map集合***
	public static void each1(){
		Map<String,String> map=new HashMap<>();
		map.put("1001", "张三");
		map.put("1002", "李四");
		map.put("1003", "王五");
		map.put("1004", "赵六");
		map.put("1005", "齐七");
		
		/*
			遍历map集合的思路：
			1、根据map的特性，根据一个键来获取一个值
			2、可以把map集合中的键的集合拿到
			3、循环键集，
			4、根据键来获取值
		 */
		//从map集合中获取键集的集合---Iterator 集合
		Iterator<String> keys=map.keySet().iterator();
		//while循环的是键集，目的是那个没有键
		//keys.hasNest()判断正在循环的集合（keys）是否有记录
		while (keys.hasNext()){
			String key=keys.next();//返回当前循环中的一个键值
			String value=map.get(key);//根据键获取值
			System.out.println(value);
		}
		
	}
	
	public static void test() {
		//map集合存储的唯一，无序的集合
		//Map 以健值对的的形式存在 Key(键) Value(值)
		//ID 对象
		//Map map=new HashMap<>();
		Map<String,String> map=new HashMap<>();
		// map.put存储值的方法
		//"1001" 键---->"张三"  值
		//健是不能重复，值是可以重复，键的值如果重复会被最后一个覆盖掉
		map.put("1001", "张三");
		map.put("1001", "李四");
		map.put("1002", "张三");
		
		//获取map集合的大小
		int size=map.size();
		System.out.println("map集合的大小："+size);
		
		//获取map集合中的数据
		String name=map.get("1001");
		System.out.println("1001这个键对应的值："+name);
		
		//删除map集合中的一条数据
		//删除键的值为1002的数据
		map.remove("1002");
		
		//清空map集合
		map.clear();
		
		map.put("1001", "李四");
		map.put("1002", "张三");
		
		//修改
		//1、利用键不能重复的特性，来替换值
		//map.put 可以添加值，也可以替换，替换是在已经存在了相同键的时候
		map.put("1001", "张三");
		map.put("1002", "李四");
		map.put("1004", "王五");
		
		//2、使用replace方法替换，我就是做替换的工作的，没有替换成功，也不会新增数据更不会报错误
		map.replace("1001", "翠花");
		map.replace("1003", "旺财");
		
		System.out.println(map);
	}
	
	
}
